草庐IT

Android PlusOneButton 不初始化

全部标签

c++ - 这样的初始化列表在 C++11 中合法吗?

我阅读了C++入门第5版,其中介绍了最新的标准支持列表初始化程序。我的测试代码是这样的:#include#include#include#includeusingstd::cin;usingstd::cout;usingstd::endl;usingstd::string;usingstd::vector;usingstd::ispunct;intmain(intargc,char*argv[]){vectora1={0,1,2};vectora2{0,1,2};//shouldbeequaltoa1return0;}然后我使用Clang4.0:bash-3.2$c++--versio

c++ - 嵌套初始化列表的构造函数

是否可以有一个通用构造函数接受任何类型的初始化列表,即使其中有嵌套列表?假设您有一个类的以下部分模板特化,该类接受其构造函数嵌套的初始化列表:模板A类;templateclassClassA{typedefstd::initializer_listlist_type;typedefstd::initializer_listllist_type;typedefstd::initializer_listlllist_type;typedefstd::initializer_listinitializer_type;size_tn_[4]={0};double*data_;public:Cl

c++ - 如何初始化静态成员对象?

我不知道我不知道这个:)。和一个similarquestionhere没有太大帮助。所以我在这里问。请考虑以下类(class)://inAgent.hclassAgent:publicns3::Object{private://...staticBaseWifim_wifi;//...};这是://Agent.cppBaseWifitemp;BaseWifiAgent::m_wifi=temp;与此非常不同://Agent.cppBaseWifiAgent::m_wifi=BaseWifi();第二种方法对我不起作用。为什么以及如何?我不想用更多的代码来麻烦你,因为我在我的程序深处遇到

c++ - 使用两个不同的构造函数初始化指向数组的指针

我有一个程序,我想在其中使用指针初始化一个类对象数组。classxyz{};cin>>M;xyz*a=newxyz[M];//thiswillcalltheconstructorforeachobject.问题是我在xyz类中有两个构造函数。我想使用其他构造函数初始化最后两个元素,而不是没有参数的默认构造函数。我该怎么做?我希望第M+1和第M+2项由接受参数的不同构造函数初始化。 最佳答案 std::vectora(M-2);a.push_back(xyz(...));//xyz(...)hereisacalltothea.push

c++ - 为什么我不能从字符串复制初始化字符串流?

以下代码在GCC、Clang和VisualStudio中失败:#include#includeintmain(){std::strings="hello";//ok,copy-initializationstd::stringstreamss1(s);//ok,direct-initializationstd::stringstreamss2=s;//error}我认为直接初始化有效而复制初始化无效的唯一情况是构造函数是显式的,在这种情况下不是这样。怎么回事? 最佳答案 该构造函数是标记为显式的,因此只能与直接初始化一起使用。§27

c++ - 在定义处初始化模板结构

我不确定这个主题是否与我正在寻找的完全匹配,但基本上是这样的:我能做到:structsomething{intd;}somethingType;但为什么我不能这样做呢?templatestructsomethingelse{intd;}somethingelseType;如果可以做第二种,正确的做法是什么? 最佳答案 我认为你可以,在语法上,但它被额外的限制所禁止:[温度]/1Atemplatedefinesafamilyofclassesorfunctionsoranaliasforafamilyoftypes.  templat

我在面试中从未见过的带有初始化的 c++ 新数组

下面的代码是做什么的?我猜它实例化了一个MyObjects数组,但我不知道?new(p)[[MyObject]] 最佳答案 这段代码当然不是一个完整的语句。我可以想象[[MyObject]]部分是一个用户定义的属性,适用于表达式这部分后面的任何内容。例如,编译以下代码:#includeintmain(){void*p=operatornew(sizeof(int));new(p)[[MyObject]]int(17);}[[MyObject]]部分使用了一个用户定义的属性,这可能毫无意义,我实际上不知道如何使用它(我可能应该在某个时

c++ - 未初始化和不确定之间的区别

我正在阅读Dotheparenthesesafterthetypenamemakeadifferencewithnew有MichaelBurr讨论uninitialized和indeterminate值。想知道它们之间的区别。我的理解是,uninitialized意味着,编译器将分配内存而不是尝试初始化对象。indeterminate->访问此对象可能会导致未定义的行为。如果我错了,请纠正我。还想知道default-initialization和value-initialization的区别。 最佳答案 我认为您的解释很接近,但完全

c++ - 使用构造函数重载初始化多个变量

假设在一个类中,构造函数被重载。是否可以使用同一类的不同构造函数为单个对象初始化多个数据成员?例如:classdemo{intsize;doublek;public:demo(ints){size=s;}demo(doublep){k=size+p;}voidshow(){cout这可能吗? 最佳答案 不,一旦对象被构造,它就被构造了。让我们检查一下您的代码,看看它做了什么(假设没有优化,请注意许多现代编译器即使在调试或-O0模式下也会做一些copy-elision):演示(0);代码demo(0)调用demo(ints)构造函数。

c++ - 使用类定义中的推断维度初始化静态常量多维数组

从C++11开始,可以在类定义中初始化staticconst内置类型,如下所示:classA{public:staticconstunsignedintval=0;//allowed};但是,在VisualC++2013中使用数组执行此操作会给我一个错误,告诉我这是不允许的:classB{public:staticconstunsignedintval[][2]={{0,1}};//notallowed};错误消息只是“constunsignedint[][2]类型的成员不能有类内初始化程序。”相反,我被迫执行以下操作:classC{public:staticconstunsigned